1. Field of the Invention
The present invention relates to a buffer architecture, and more specifically to a buffer architecture with multiple buffers allocated storage within a common storage area where the allocation is reconfigurable.
2. Description of the Related Art
Buffers are used within systems to provide temporary storage for data. Buffers are either FIFO (First-In-First-Out) or LIFO (Last-In-First-Out). In a FIFO buffer, data is written to the front end of the buffer and is read from the back end of the buffer. In a LIFO buffer, data is written and read from the front end of the buffer. Data in a FIFO buffer “Marches” through the buffer and is read in the strict ordering in which it was written. Data in a LIFO buffer is stacked on the buffer and the most recently written data is read before less recently written data.
FIFO buffers are generally implemented as a circular queue having a read pointer which points to the “next” location in the buffer storage to be read and a write pointer which points to the “next” location to be written. The write pointer is used by the control logic of the buffer to access a location where data is to be written in the buffer storage and the read pointer used by the control logic of the buffer to access a location whose data is to be read from buffer storage. A device which is connected to the buffer sends data to the buffer and the control logic writes the data to the buffer storage location corresponding to the write pointer. A device which reads from the buffer reads data presented to it by the control logic which reads the data from the buffer storage location corresponding to the read pointer.
LIFO buffers are generally implemented as a stack with a pointer to the bottom of the stack and a stack pointer to the location in buffer storage where data was last written. The stack pointer is usually both a read pointer and a write pointer. The stack pointer is used by the control logic of the buffer to point to the location in buffer storage where the most recently written data was stored. A device connected to the buffer reads from data presented to it by the control logic which reads the data from the buffer storage location corresponding to the stack pointer, then moves the stack pointer to the location in buffer storage previously written. A device writes data to the buffer and the control logic moves the stack pointer to the next free location in buffer storage and writes the data to the location in buffer storage corresponding to the pointer.
In a conventional buffer mechanism, the size of each buffer storage area is determined in advance and is fixed thereafter, especially in ASIC applications. This fixed allocation can be inefficient and has a larger memory requirement if multiple buffers are required by the system, not all of which will be simultaneously busy or active to the same degree. For example, in a system with two devices or applications needing buffer support, only one of which is active at any time, all of the buffers associated with the inactive device or application may be in an idle state, while the buffers for the active device or application may be of insufficient size for optimal performance.